package com.beiding.dbrequest.server;

import io.netty.channel.ChannelHandlerContext;

import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * 通道选择策略
 * 可自定义
 *
 * @author 丁常磊
 * @date 2021/9/22 9:23
 */

public interface ChannelSelector {

    /**
     * 使用策略获取
     *
     * @param name
     * @param groupMap
     * @return
     */
    default ChannelHandlerContext getOne(Map<String, ChannelGroup> groupMap, String name) {
        ChannelGroup channelGroup = groupMap.get(name);
        if (channelGroup != null && channelGroup.getContexts().size() > 0) {
            //极端的情况下会数组越界等异常的可能性
            try {
                return getOne(Collections.unmodifiableList(channelGroup.getContexts()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 获取一个通道
     *
     * @param contexts
     * @return
     */
    ChannelHandlerContext getOne(List<ChannelHolderForSelect> contexts);

}
